package models;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author KGB
 */
public class Hands {
   int licznik;// zmienna pomocnicza
   int [] tabnaj = new int [10]; // przechowuje informacje o najwyzszej parze, drugiej parze o trojce o karecie i o kartach wolnych
  
    //karty przechowywane sa w nastepujacy sposob 2:<0,3>  3:<4,7> .... A:<48,51> kolor %4 z liczby
    
    boolean czyStrit(Card tab[]){ // metoda mowi nam czy mamy strita
        int n=5;
        Card temp;
        while(n>1){ // sortowanie tablicy
            for(int i=0;i<n-1;i++){
            if(tab[i].figura>tab[i+1].figura){
                temp=tab[i];
                tab[i]=tab[i+1];
                tab[i+1]=temp;
                }
            }
            n--;
        }
       
        int i=0;
        while((int)(tab[i].figura)==(int)(tab[i+1].figura)-1){
            i++;
            if(i==4){
                return true;
            }
           
        }
        return false;
    }

    boolean czyKolor(Card tab[]){ // metoda mowi nam czy mamy kolor
          int i=0;
        while((tab[i].kolor)==(tab[i+1].kolor)){
            i++;
            if(i==4){
                return true;
            }
           
        }
        return false;
       
    }
    void Licznik(Card tab[]){ // metoda pozwala ustalic czy mamy (nic, pare,dwie pary, trojke, fulla, karete)
        licznik=0;
        int n=5;//sortowanie 
       Card temp;
    
        while(n>1){
            for(int i=0;i<n-1;i++){
            if(tab[i].figura<tab[i+1].figura){
                temp=tab[i];
                tab[i]=tab[i+1];
                tab[i+1]=temp;
                }
            }
            n--;
        }
 
        
        int i=0;// zmienna pomocnicza
        int p=0;//liczba par
        int t=0;//liczba trojek
        int k=0;//liczba karet
        int w=0;//liczba kart wolnych
        int m=0;// index karty w rece
        
        while(m<4){       
            while((tab[m].figura)==(tab[m+1].figura)){
                
                m++;
                i++;
                if(m==4)
                    break;
            }
             if(i==0){
                 tabnaj[w+5]=(tab[m].figura);
                
                 w=w+1;
                 if(m==3){
                 tabnaj[w+5]=(tab[m+1].figura); 
                 }
                 
             }
             if(i==1){
                tabnaj[p]=tab[m-1].figura;
                p=p+1;
                i=0;
                if(m==3){
                    tabnaj[w+5]=(tab[m+1].figura); 
                   }
            
            }
            if(i==2){
                tabnaj[2]=tab[m-1].figura;
                t=t+1;
                if(m==3){
                    tabnaj[w+5]=(tab[m+1].figura); 
                }
                i=0;
            }
            if(i==3){
                tabnaj[3]=tab[m-1].figura;
                k=k+1;
                i=0;
                if(m==3){
                    tabnaj[w+5]=(tab[m+1].figura); 
                }
            }
            m++;
        }
        licznik=(2*p)+(3*t)+(6*k); // co mamy ( 0-nic 2-para 4-2pary 3- trojka 5-full 6- kareta)
    }
    void koniec(){
        for(int i=0;i<10;i++){
                tabnaj[i]=0;
        }
    }
    void koniec2(int [] wynik ){
    	for(int i=0;i<10;i++){
            wynik[i]=0;
    }
    }
    
    int najwyzszakarta(Card tab[]){ // metoda ustala najwyzsza karte z reki
        int najkart=0;
        for(int i=0;i<5;i++){
            if(najkart<(int)(tab[i].figura)){
                najkart=(int)(tab[i].figura);
            }
        }
        return najkart;
    }

    void comam (Card [] kartyReka , int [] wynik){ // metoda pozwala nam ustalic jaki uklad kart mamy w rece
    int stopien=0;
      koniec2(wynik);
      Licznik(kartyReka);
    
     // System.out.print(licznik);
      if((czyKolor(kartyReka)==true)&&(licznik<5)&&(czyStrit(kartyReka)==false)){ // kolor
          stopien=5;
          for(int i=1;i<6;i++){
               wynik[i]=(int)(kartyReka[5-i].figura);
          }
      
      }
      else if((czyStrit(kartyReka)==true)&&((czyKolor(kartyReka)==true))){ // poker
          stopien=8;
          wynik[1]=najwyzszakarta(kartyReka);
      }
      else if((czyStrit(kartyReka)==true)&&((czyKolor(kartyReka)==false))){ // strit
          stopien=4;
          wynik[1]=najwyzszakarta(kartyReka);
      }
      else if(licznik==6){ // kareta
          stopien=7;
          wynik[1]=tabnaj[3];
  
      }
      else if(licznik==5){ // full
          stopien=6;
          wynik[1]=tabnaj[2];
      }
      else if((czyKolor(kartyReka)==false)&&(czyStrit(kartyReka)==false)){
         if(licznik==0){ // nic
             stopien=0;
             for(int i=0;i<5;i++){
                 wynik[i+3]=tabnaj[i+5];
             }
         }
         else if(licznik==2){ // para
             stopien=1;
             wynik[1]=tabnaj[0];
             for(int i=0;i<3;i++){
                 wynik[i+6]=tabnaj[i+5];
             }
         }
         else if(licznik==4){ // dwie pary
             stopien=2;
             wynik[1]=tabnaj[0];
             wynik[2]=tabnaj[1];
             wynik[8]=tabnaj[5];
         }
         else if(licznik==3){ // trojka
             stopien=3;
             wynik[1]=tabnaj[2];
             wynik[7]=tabnaj[6];
             wynik[8]=tabnaj[5];
         }
      }
      wynik[0]=stopien;
      koniec();
      licznik=0;
    }
}
